package cn.iocoder.yudao.module.vlog.product.service;

import cn.iocoder.yudao.module.api.product.spu.dto.ProductSpuRespDTO;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

/**
 * 视频带货 Service 实现类
 *
 * @author 山野羡民（1032694760@qq.com）
 */
public interface VLogProductService {

    /**
     * 获得视频带货 SPU 编号数组
     *
     * @param vlogIds 视频编号数组
     * @param limit   限制条数
     * @return 键值对：视频编号+产品信息数组
     */
    Map<Long, Collection<ProductSpuRespDTO>> getProductSpuMap(@NonNull Collection<Long> vlogIds, @Nullable Integer limit);

    default Map<Long, Collection<ProductSpuRespDTO>> getProductSpuMap(@NonNull Collection<Long> vlogIds) {
        return getProductSpuMap(vlogIds, null);
    }

    /**
     * 获得视频带货 SPU 编号数组
     *
     * @param vlogId 视频编号
     * @param limit  限制条数
     * @return 产品信息数组
     */
    default Collection<ProductSpuRespDTO> getProductSpuList(@NonNull Long vlogId, @Nullable Integer limit) {
        return getProductSpuMap(Set.of(vlogId), limit).get(vlogId);
    }

    /**
     * 获得视频带货 SPU 编号数组
     *
     * @param userId 用户编号
     * @param shopId 店铺编号
     * @param vlogId 视频编号
     * @param limit  限制条数
     * @return 产品 SPU 编号数组
     */
    Set<Long> getProductSpuIds(@NonNull Long userId, @NonNull Long shopId, @NonNull Long vlogId, @Nullable Integer limit);

}
